package com.robot.base.common.api;

import com.qihang.annotations.ApiFactory;
import com.robot.base.model.BasePageBean;
import com.robot.base.model.LoginBean;
import com.robot.base.model.PersonDataDTOBean;
import com.robot.base.model.PersonDetailDTOBean;
import com.robot.base.model.UserInfoBean;

import java.util.Map;

import io.reactivex.Observable;
import me.goldze.mvvmhabit.http.BaseResponse;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Streaming;
import retrofit2.http.Url;

@ApiFactory(value = GlBaseApi.class)
public interface UserService {

    /**
     * 获取图形验证码
     *
     * @return
     */
    @GET("/jwt/api/getCode")
    Observable<ResponseBody> getCode(@Query("uvcid") String uvcid);

    /**
     * 登录
     *
     * @param map
     * @return
     */
    @FormUrlEncoded
    @POST("/jwt/api/auth/login")
    Observable<BaseResponse<LoginBean>> login(@FieldMap Map<String, Object> map);

    /**
     * 获取当前登录用户信息
     */
    @GET("/users/api/getLoginUserDetail")
    Observable<BaseResponse<UserInfoBean>> getLoginUser();

    /**
     * 退出登录
     *
     * @return
     */
    @POST("/jwt/api/auth/logout")
    Observable<BaseResponse<String>> logout();

    /**
     * 登录用户修改自己的个人信息
     *
     * @param map
     * @return
     */
    @POST("/users/api/updateOwnInfo")
    Observable<BaseResponse<String>> updateOwnInfo(@Body Map<String, Object> map);

    /**
     * 查安全管理人员列表（分页)
     *
     * @param map
     * @return
     */
    @GET("/users/api/getSafetyPersonPageList")
    Observable<BaseResponse<BasePageBean<PersonDataDTOBean>>> getSafetyPersonPageList(@QueryMap Map<String, String> map);

    /**
     * 查安全管理/作业人员详情
     *
     * @param map
     * @return
     */
    @GET("/users/api/getSafetyPersonDetail")
    Observable<BaseResponse<PersonDetailDTOBean>> getSafetyPersonDetail(@QueryMap Map<String, String> map);

    /**
     * 新增安全管理人员
     *
     * @param map
     * @return
     */
    @POST("/users/api/addSafetyPerson")
    Observable<BaseResponse<String>> addSafetyPerson(@Body Map<String, String> map);

    @Streaming
    @GET
    Observable<ResponseBody> dowloadApk(@Url String url);
}
